home *** CD-ROM | disk | FTP | other *** search
/ MACup: Giveaway 1996 / Image.iso / Shareware & Demos / Web-Publishing / SNAP PrimeBase / PrimeBase™ Server PPC / Setup / Scripts / iostat.dal < prev    next >
Encoding:
Text File  |  1996-07-13  |  6.2 KB  |  179 lines  |  [TEXT/ds30]

  1. /*
  2. Author: Dirk Strack
  3.  
  4. execute file "iostat";
  5.  
  6. absolute bytezahlen im interval messen and ausgeben:
  7. iostat(1,1000,1);
  8.  
  9. byte pro sekunde im interval messen and ausgeben:
  10. iostat(10,10,2);
  11.  
  12. statistic struktur auflisten:
  13. iostat(0,1,3);
  14. */
  15.  
  16. declare boolean iostat_first_access = $true;
  17. declare cursor io_x, io_y;
  18.  
  19. declare procedure iostat(interval, loops, mode)
  20. argument float interval = 1;
  21. argument integer loops = 10;
  22. argument float mode = 1;
  23. {
  24.     declare cursor odb;
  25.     declare timestamp start;
  26.     declare float TimeLimit, DelayTime;
  27.     declare integer title_cnt = 0;
  28.     declare integer    i, TicksUsedCount, ConnectionsBytesRead, ConnectionsBytesWritten, 
  29.         DiskBytesRead, DiskBytesWritten, FilesOpenedCount, StatementCreatedCount,
  30.         ProcessesCreatedCount, TransactionsCreatedCount, ResultReadCount, 
  31.         ResultWriteCount, ResultAccessCount, PageCacheHitCount, PageCacheMissCount;
  32.         
  33.     if (iostat_first_access or interval > 0)
  34.     {
  35.         errorctl 1;
  36.         open database Master;
  37.         errorctl 0;
  38.         select * from Master!System.SysStatistics into io_x for extract;
  39.     }
  40.     if (mode = 3)
  41.     {
  42.         describe open dbms into odb; 
  43.         fetch of odb;
  44.         
  45.         print " SysStatistics for ", odb->brand;
  46.         fetch first of io_x;
  47.         for (i = 1; i <= $cols(io_x); i++)
  48.             printf("\n%-30s : %10s", $colname(io_x,i), io_x->:i);
  49.         print "";
  50.         return;
  51.     }
  52.     iostat_first_access = $true;
  53.     TimeLimit = (float $now()) + interval;
  54.     while (loops > 0)
  55.     {
  56.         if (title_cnt == 0)
  57.         {
  58.             title_cnt = 20;
  59.             switch (mode)
  60.             {    
  61.                 case 1:
  62.                 printf("\n    LTime   HTime Delay Activ\% CommIn   -Out -Active  DiskIn    Out  StatC  StatQ  ProcC  ProcQ TransC TransQ  ResIO ResAcc CacheHit Miss\n");
  63.                 break;
  64.                 case 2:
  65.                 printf("\n Time    Server       Conn KB/Sec      Disk KB/Sec  Transactions  Statements   Memory ResultCache     PageCache");
  66.                 printf("\n         Active\%     In      Out       In     Out    Sec Act Que  Sec Act Que  Used\%  Used\%  Hit\%   Used\%  Hit\%\n");
  67.             }
  68.         }
  69.         
  70.         do
  71.             DelayTime    = (float $now()) - TimeLimit;
  72.         while(DelayTime < 0);
  73.         if (DelayTime > 1e0)
  74.             TimeLimit = (float $now());
  75.         
  76.         select * from Master!System.SysStatistics into io_y for extract;
  77.         fetch first of io_x;
  78.         fetch first of io_y;
  79.         
  80.         TicksUsedCount    = io_y->TicksUsedCount     - io_x->TicksUsedCount;
  81.         if (TicksUsedCount != 0)
  82.         {
  83.             loops                    = loops - 1;
  84.             title_cnt                = title_cnt - 1;
  85.  
  86.             DelayTime                = (float io_y->HostTime)             - (float io_x->HostTime);
  87.             ConnectionsBytesRead    = io_y->ConnectionsBytesRead         - io_x->ConnectionsBytesRead;
  88.             ConnectionsBytesWritten    = io_y->ConnectionsBytesWritten     - io_x->ConnectionsBytesWritten;
  89.             DiskBytesRead            = io_y->DiskBytesRead                 - io_x->DiskBytesRead;
  90.             DiskBytesWritten        = io_y->DiskBytesWritten             - io_x->DiskBytesWritten;
  91.             FilesOpenedCount        = io_y->FilesOpenedCount             - io_x->FilesOpenedCount;
  92.             StatementCreatedCount    = io_y->StatementCreatedCount         - io_x->StatementCreatedCount;
  93.             ProcessesCreatedCount    = io_y->ProcessesCreatedCount         - io_x->ProcessesCreatedCount;
  94.             TransactionsCreatedCount= io_y->TransactionsCreatedCount     - io_x->TransactionsCreatedCount;
  95.             ResultReadCount            = io_y->ResultReadCount             - io_x->ResultReadCount;
  96.             ResultWriteCount        = io_y->ResultWriteCount             - io_x->ResultWriteCount;
  97.             ResultAccessCount        = io_y->ResultAccessCount            - io_x->ResultAccessCount;
  98.             PageCacheHitCount        = io_y->PageCacheHitCount            - io_x->PageCacheHitCount;
  99.             PageCacheMissCount        = io_y->PageCacheMissCount            - io_x->PageCacheMissCount;
  100.                
  101.             switch (mode)
  102.             {    
  103.                 case 1:
  104.                 printf("%8.8s %8.8s %5s %6d %6d %6d %7d %7d %6d %6d %6d %6d %6d %6d %6d %6d %6d %6d %6d\n",
  105.                     time $now(),
  106.                     time io_y->HostTime,
  107.                     decimal[5,2] DelayTime,
  108.                     decimal[6,1] (TicksUsedCount / (DelayTime * io_y->TicksPerSecond) * 100), 
  109.                     ConnectionsBytesRead - 384, 
  110.                     ConnectionsBytesWritten - 206, 
  111.                     io_y->ConnectionsActiveCount,
  112.                     DiskBytesRead, DiskBytesWritten,
  113.                     StatementCreatedCount - 1, io_y->StatementQueueCount, ProcessesCreatedCount, 
  114.                     io_y->ProcessQueueCount,
  115.                     TransactionsCreatedCount - 1, io_y->TransactionQueueCount, 
  116.                     ResultReadCount + ResultWriteCount, 
  117.                     ResultAccessCount, PageCacheHitCount, PageCacheMissCount);
  118.                     
  119.                 if (io_y->TransactionQueueCount > 2 or (DiskBytesRead > 1048576 and interval = 1))
  120.                 {
  121.                     SELECT    A.Type LockType, (varchar C.Name + "." + varchar B.Name) DBName, 
  122.                             time D.StartTime StartTime,
  123.                             D.LockTimeout, D.QueueTime, (varchar[10] E.Query) Query, 
  124.                             (varchar[10] F.UserName) UserName, F.Workstation
  125.                     FROM    SysFileLocks A, SysFiles B, 
  126.                             SysDatabases C, SysTransactions D,
  127.                             SysProcesses E, SysConnections F
  128.                     WHERE    A.FileID = B.ID
  129.                     AND        B.DatabaseID = C.ID
  130.                     AND        A.TransactionID = D.ID
  131.                     AND        D.ProcessID = E.ID
  132.                     AND        E.ConnectionID = F.ID
  133.                     AND        F.ID != $connid 
  134.                     FOR EXTRACT;
  135.                     if ($rowcnt)
  136.                     {
  137.                         show;
  138.                         printf("\n");
  139.                         title_cnt = 0;
  140.                     }
  141.                 }
  142.                 break;
  143.                 case 2:
  144.                 
  145.                 if (ResultAccessCount = 0)
  146.                     ResultAccessCount = 1;
  147.                 if (PageCacheHitCount + PageCacheMissCount = 0)
  148.                     PageCacheHitCount = 1;
  149.                 printf("%8.8s %6s %8s %8s %8s %8s %6s %2d %2d %6s %2d %2d %6s %6s %6s %6s %6s \n",
  150.                     time io_y->HostTime,
  151.                     decimal[6,1] (TicksUsedCount / (DelayTime * io_y->TicksPerSecond) * 100), 
  152.                     decimal[8,1] (ConnectionsBytesRead / DelayTime / 1024), 
  153.                     decimal[8,1] (ConnectionsBytesWritten / DelayTime / 1024),
  154.                     decimal[8,1] (DiskBytesRead / DelayTime / 1024), 
  155.                     decimal[8,1] (DiskBytesWritten / DelayTime / 1024),
  156.                     decimal[6,1] (TransactionsCreatedCount / DelayTime), 
  157.                     io_y->TransactionsActiveCount, 
  158.                     io_y->TransactionQueueCount,
  159.                     decimal[6,1] (StatementCreatedCount / DelayTime), 
  160.                     io_y->ProcessQueueCount, 
  161.                     io_y->StatementQueueCount,
  162.                     decimal[6,1] (float io_y->MemoryAllocated / float io_y->MemoryAllocationLimit * 100),
  163.                     decimal[6,1] (float io_y->ResultCacheUsed / float io_y->ResultCacheSize * 100),
  164.                     decimal[6,1] (float (ResultAccessCount - ResultReadCount) / float ResultAccessCount * 100),
  165.                     decimal[6,1] (float io_y->PageCacheUsed / float io_y->PageCacheSize * 100),
  166.                     decimal[6,1] (float PageCacheHitCount / float (PageCacheHitCount + PageCacheMissCount) * 100)
  167.                     );
  168.                 break;
  169.             }
  170.         }
  171.         TimeLimit    = TimeLimit + interval;
  172.         deselect io_x;
  173.         io_x = io_y;
  174.     }
  175.     iostat_first_access    = $false;
  176.     
  177. } end procedure iostat;
  178.  
  179.